package com.huluobo.a2203kotlinjetpackdemo.lifeCycle

import android.os.CountDownTimer
import android.util.Log
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent

/**
 *  Created by LC on 2024/7/17.
 *  LifeCycle总结
 *  观察模式三要素 观察者(Observer) 被观察者(Observable) 订阅关系(subscribe)
 *  1.如果使用LifeCycle,首先要实现一个接口LifecycleObserver,让他可以去感知(观察)宿主的生命周期变化
 *  2.需要一个宿主,LifeCycleOwner,由于AppCompatActivity已经实现了宿主接口,所以可以省略
 *  3.通过 lifecycle.addObserver(adManager) ,来实现订阅关系
 *  4.可以有效解决宿主对象中控制其他控件的生命周期,让观察者可以跟随宿主的声明做出自行的判断,来调用某些方法,比如跟随Activity一起销毁
 *  不会造成内存泄漏
 */
class ADManager(adViewModel: ADViewModel) : LifecycleObserver {

    private val countDownTimer = object : CountDownTimer(adViewModel.timing, 1000) {
        override fun onTick(millisUntilFinished: Long) {
            Log.i("TagA", "广告剩余时间:${(millisUntilFinished / 1000).toInt()}秒")
//            adManagerListener?.timing((millisUntilFinished / 1000).toInt())
            adViewModel.setAdTimingResult(millisUntilFinished/1000)
        }

        override fun onFinish() {
            Log.i("TagA", "广告结束时,准备进入主页面")
//            adManagerListener?.finish()
        }
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    fun start() {
        Log.i("TagA", "开始计时")
        countDownTimer.start()
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    fun cancel() {
        Log.i("TagA", "计时结束")
        countDownTimer.cancel()
    }

//    //接口回调4步
//    //1.创建接口
//    interface ADManagerListener {
//        fun timing(second: Int)
//        fun finish()
//    }
//
//    //2.声明接口
//    var adManagerListener: ADManagerListener? = null
//
//    //3.声明对外set的方法,在Java中需要写,kotlin由于不需要写setget,所以可以省略
}